// class Hasptr {
//   friend void swap(Hasptr &, Hasptr &);

// public:
//   Hasptr(); //默认构造函数

//   //拷贝构造函数，完成string 指针指向内容的拷贝和i值的拷贝
//   Hasptr(const Hasptr &p) : ps(new string(*p.ps)), i(p.i) {}

//   //拷贝赋值运算符
//   Hasptr &operator=(const Hasptr &p) {
//     auto new_ps = new string(*p.ps);
//     delete ps;
//     ps = new_ps;
//     return *this;
//   }

//   //析构函数
//   ~Hasptr() { delete ps; }

// private:
//   string *ps;
//   int i;
// };

// inline void swap(Hasptr &a, Hasptr &b) {
//   using std::swap;
//   swap(a.ps, b.ps);
//   std::swap(a.i, b.i);
//   cout << "123";
// }